/*
Dominique Jannone
Guillaume Marre
Yohan Ojeda
Laurent Schiavon
*/
package Econf_Audio;

import java.io.IOException;
import java.io.ObjectOutputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;

import model.ConnexionDb;

public class AgentUpdateClient implements Runnable {
	
	// log
		public static final Logger logger = Logger.getLogger(AgentUpdateClient.class.getName());

	// attributs
	public static Socket soccketA;
	private Object[][] value;
	private String ip_Client;
	private int port_Client;
	private String roleUser;
	
	// Observateur & setters
	
// Constructeur primitif
	public AgentUpdateClient(String ip_Client , int port_Client, Object[][] value, String roleUser){
			this.roleUser = roleUser;
			this.ip_Client = ip_Client;
			this.port_Client = port_Client;
			this.value = value;
	}



	// Démarrage de la Thread
	public void run() {
		try {
			// Connection sur la socket du client eConf
			soccketA =  new Socket(ip_Client,port_Client);
			
			logger.log(Level.INFO,"Connexion réussie pour Agent Update Client pour "+ip_Client+" avec le port "+port_Client);
			
			
				OutputStream sortie = soccketA.getOutputStream();
				ObjectOutputStream oosA = new ObjectOutputStream(sortie);
			
				 // Creation du flux de sortie
				  try {
					//Envoie de la taille du tableau
						Object elementTaille = value.length;						       
						oosA.writeObject(elementTaille);
						oosA.flush();
					//Envoie de la taille du tableau
						Object elementRoleUser = roleUser;						       
						oosA.writeObject(elementRoleUser);
						oosA.flush();
					  
					  
						logger.log(Level.INFO," ---> Envoi des infos en cours au serveur sur le port " + soccketA.getPort() +"...");
						logger.log(Level.INFO,"NB de ligne: "+value.length);
						logger.log(Level.INFO,"NB de colonne: "+value[0].length);
					  
					  //Envoi du tableau vers le serveur
					  for (int i = 0; i < value.length; i++) {
						  for (int j = 0; j < value[i].length; j++) {
						    Object element = value[i][j];
						    logger.log(Level.INFO,"Les données a envoyees sont : " + element +"\n");						       
							oosA.writeObject(element);
							oosA.flush();
						}
					  }			   
				    } catch (Exception e2) {
				    	logger.log(Level.SEVERE," ---> Erreur en creant le flux de sortie Agent Update delegate: " + e2);
				    	logger.log(Level.SEVERE,e2.getClass() + ": " +  e2.getMessage(), e2);
				    }
			
			
		} catch (Exception e) {
			logger.log(Level.SEVERE,"Erreur AgentUpdateClient: "+e);
			logger.log(Level.SEVERE,e.getClass() + ": " +  e.getMessage(), e);
		}
		logger.log(Level.INFO,"Fin usage Agent Update Client pour "+ip_Client+" avec le port "+port_Client);
	}
		
}
